#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 环境变量读取辅助工具，统一处理类型转换等
import os
from typing import Optional


def str_to_bool(value: Optional[str], default: bool = False) -> bool:
    """
    将字符串转换为布尔值。
    识别 'true', '1', 'yes' 为 True，
    'false', '0', 'no' 为 False，忽略大小写。
    其他值返回默认值。

    Args:
        value (Optional[str]): 输入字符串。
        default (bool): 转换失败时的默认返回值，默认 False。

    Returns:
        bool: 转换后的布尔值。
    """
    if not isinstance(value, str):
        return default
    val = value.strip().lower()
    if val in ('true', '1', 'yes'):
        return True
    if val in ('false', '0', 'no'):
        return False
    return default


def getenv_str(key: str, default: Optional[str] = None) -> Optional[str]:
    """
    从环境变量获取字符串值。

    Args:
        key (str): 环境变量名。
        default (Optional[str]): 未设置时返回的默认值。

    Returns:
        Optional[str]: 环境变量的字符串值或默认值。
    """
    return os.getenv(key, default)


def getenv_int(key: str, default: int = 0) -> int:
    """
    从环境变量获取整数值。

    Args:
        key (str): 环境变量名。
        default (int): 未设置或转换失败时返回的默认值。

    Returns:
        int: 转换后的整数值或默认值。
    """
    val = os.getenv(key)
    if val is None:
        return default
    try:
        return int(val)
    except ValueError:
        return default


def getenv_float(key: str, default: float = 0.0) -> float:
    """
    从环境变量获取浮点数值。

    Args:
        key (str): 环境变量名。
        default (float): 未设置或转换失败时返回的默认值。

    Returns:
        float: 转换后的浮点数值或默认值。
    """
    val = os.getenv(key)
    if val is None:
        return default
    try:
        return float(val)
    except ValueError:
        return default


def getenv_bool(key: str, default: bool = False) -> bool:
    """
    从环境变量获取布尔值。

    Args:
        key (str): 环境变量名。
        default (bool): 未设置时返回的默认值。

    Returns:
        bool: 转换后的布尔值或默认值。
    """
    val = os.getenv(key)
    if val is None:
        return default
    return str_to_bool(val, default)
